/*
    1. 类定义方式：
        1. 类声明
        2. 类表达式
*/

// 类声明
class Person {};

// 类表达式
const Animal = class{};


// (1). 类声明不提前
// console.log(Child);   // ReferenceError: Cannot access 'Child' before initialization
class Child{};

// (2). 类受块作用域限制
{
    class Song{};
}

// console.log(Son);   // ReferenceError: Son is not defined


// 2. 类构成

// (1). 空类
class Foo{};

// (2). 含构造函数
class bar{
    constructor() {};
};

// (3). 有获取函数的类
class Baz{
    get myBaz() {
        return 0;
    };
};

// (4). 有静态方法的类
class Qux{
    static myQux() {};
};


// 3. 类的名称是可选的
let Person1 = class PersonName {
    identity() {
        console.log(Person1.name, PersonName.name);
    };
};

let p1 = new Person1();
p1.identity();   // PersonName PersonName

console.log(Person1.name);  // PersonName
// console.log(PersonName);   // ReferenceError: PersonName is not defined
